package com.sywl.ytcx.controller;

import com.sywl.ytcx.config.PathConfig;
import com.sywl.ytcx.service.AssetService;
import com.sywl.ytcx.util.FileUtil;
import org.springframework.core.io.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@Controller
@CrossOrigin
@RequestMapping("/api/asset")
/* 资源控制器
 * 资源控制器属于公用控制器，前后台都可访问，不进入admin或front文件夹
 * 声明：
 * 1.所有资源都必须在asset文件夹下
 * 2.所有资源通过资源控制器访问
 * 3.资源控制器必须在config/PathConfig.java中配置
 * 后期优化问题：例如，哔哩哔哩，小红书等等平台，其实是有单独储存文件的文件服务，这个我们后期图量大之后
 * 也需要使用文件服务,访问更快，也更安全
 * */
public class AssetController {

    @Autowired
    private AssetService assetService;

    /**
     * 获取图片，单个接口 - 若后期维护，多开两个接口来分担压力
     */
    @GetMapping("/{type}/{fileName:.+}")
    public ResponseEntity<Resource> getAsset(
            @PathVariable("type") String type,
            @PathVariable String fileName,
            @RequestParam(value = "download", defaultValue = "false") boolean download) {
        System.out.println("fileName: " + fileName);
        return assetService.getAsset(fileName, type, download);
    }


    /**
     * 上传图片
     *
     * @param file 文件
     * @return 图片url
     * <p>
     * 注意：这个接口是上传图片，做帖子上传不要用这个接口，这个接口是给后台上传用的
     * @Pathveriable type 文件类型
     * 上传图片需要有一个ip黑名单，同ip访问次数过多屏蔽，防止暴力上传
     */
    @PostMapping("/{type}/upload")
    public ResponseEntity<String> uploadImage(
            @PathVariable("type") String type,
            @RequestParam("file") MultipartFile file
    ) {
        if (file.isEmpty()) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("请选择图片");
        }
        try {
            String asstUrl = assetService.uploadAsset(file, type);
            return ResponseEntity.ok(asstUrl);
        } catch (Exception ex) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("上传失败: " + ex.getMessage());
        }
    }


}
